package com.takeaway.dao.daointerface;

import com.takeaway.pojo.Shop;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 后台赖骏
 */
public interface ShopDao {
    /**
     * 用途：将对象参数传入进去，进行数据库的增加
     *
     * @param shop 这个是指定的泛型进行传参
     * @return 返回的类型代表操作成功数
     * @throws Exception 如果其中发生了异常，则可以在service中进行回滚
     */
    int insert(Shop shop) throws Exception;

    /**
     * 用途：将class对象类参数和要删除的id传入进去，进行数据库的删除
     *
     * @param clz        将对应的class对象传输进去，可以对其进行删除操作
     * @param factor     这个是具体要查询
     * @param checkField 这个是具体要查询的条件
     * @return 返回的类型代表操作成功数
     * @throws Exception 如果其中发生了异常，则可以在service中进行回滚
     */
    int delete(Class<Shop> clz, String[] checkField, Object... factor) throws Exception;

    /**
     * 用途：将对象参数传入进去，进行数据库的增加
     *
     * @param shop 这个是指定的泛型进行传参
     * @return 返回的类型代表操作成功数
     * @throws Exception 如果其中发生了异常，则可以在service中进行回滚
     */
    int update(Shop shop) throws Exception;


    /**
     * 将三个参数传入进去进行数据库查询
     *
     * @param shop        这个是指定的泛型进行传参
     * @param factor      这个是具体要查询
     * @param checkFields 这个是具体要查询的条件
     * @return 返回的所输入的对象
     * @throws Exception 如果其中发生了异常，则可以在service中进行回滚
     */
    Shop selectSingle(Shop shop, String[] checkFields, Object... factor) throws Exception;


    /**
     * 直接查询以下表的所有字段
     *
     * @param clz     将对应的class对象传输进去，可以对其进行查询操作
     * @param begin   查询的开始显示的条数
     * @param listNum 要显示多少条
     * @return 返回的所输入的对象集合
     * @throws Exception 如果其中发生了异常，则可以在service中进行回滚
     */
    ArrayList<Shop> selectMore(Class<Shop> clz, int begin, int listNum) throws Exception;

    /**
     * 通过设下的单个条件进行查询查询以下表的所有字段
     *
     * @param clz        将对应的class对象传输进去，可以对其进行查询操作
     * @param checkField 这个输入查询所需要的字段
     * @param factor     这个是输入查询条件数据
     * @return 返回的所输入的对象集合
     * @throws Exception 如果其中发生了异常，则可以在service中进行回滚
     */
    ArrayList<Shop> selectMore(Class<Shop> clz, String[] checkField, Object... factor) throws Exception;

    /**
     * 这式查询商铺的条数
     *
     * @return 返回商铺条数
     * @throws Exception 返回异常
     */
    long selectListNum() throws Exception;

    /**
     * 通过设下的单个条件进行查询查询以下表的所有字段
     *
     * @param clz         将对应的class对象传输进去，可以对其进行查询操作
     * @param checkFactor 这个是输入查询条件数据
     * @return 返回的所输入的对象集合
     * @throws Exception 如果其中发生了异常，则可以在service中进行回滚
     */
    List<Shop> selectLikeMore(Class<Shop> clz, String checkFactor) throws Exception;

    /**返回已通过审核的商店
     * @param begin 开始的页数
     * @param listNum 一共显示多少页
     * @return 返回shop
     * @throws Exception 抛出异常
     */
    List<Shop> selectShop(int begin, int listNum) throws Exception;

    /**返回收藏的店铺
     * @param userId 用户的id
     * @return 返回收藏的店铺
     * @throws Exception 抛出异常
     */
    List<Shop> selectCollect(int userId) throws Exception;

}

